﻿using System;
using System.ComponentModel;

namespace Dafybjy
{
    public class Enums
    {
        public enum ReportStatus
        {
            /// <summary>
            /// 打印中,无其他可打印报告
            /// </summary>
            Printing,
            /// <summary>
            /// 打印中,还有其他可打印报告
            /// </summary>
            PrintingAndHasReport,
            /// <summary>
            /// 重复打印
            /// </summary>
            IsRepeat,
            /// <summary>
            /// 无纸
            /// </summary>
            NoPaper,
            /// <summary>
            /// 无报告可打
            /// </summary>
            NoReport,
            /// <summary>
            /// 打印机故障
            /// </summary>
            Error,
            /// <summary>
            /// 结果未出
            /// </summary>
            NoResult
        }
    }

    /// <summary>
    /// 枚举类扩展
    /// </summary>
    public static class EnumExtension
    {
        /// <summary>
        /// 获取特性 (DisplayAttribute) 的名称；如果未使用该特性，则返回枚举的名称。
        /// </summary>
        /// <param name="enumValue"></param>
        /// <returns></returns>
        //public static string GetDisplayName(this Enum enumValue)
        //{
        //    FieldInfo fieldInfo = enumValue.GetType().GetField(enumValue.ToString());
        //    DisplayAttribute[] attrs =
        //        fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false) as DisplayAttribute[];

        //    return attrs.Length > 0 ? attrs[0].Name : enumValue.ToString();
        //}

        /// <summary>
        /// 获取特性 (DisplayAttribute) 的说明；如果未使用该特性，则返回枚举的名称。
        /// </summary>
        /// <param name="enumValue"></param>
        /// <returns></returns>
        public static string GetDisplayDescription(this Enum enumValue)
        {
            var fieldInfo = enumValue.GetType().GetField(enumValue.ToString());
            return fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false) is DescriptionAttribute[] attrs && attrs.Length > 0
                ? attrs[0].Description
                : enumValue.ToString();
        }
    }
}